pandas数据处理之合并与拼接
本文作者:金点,中南财经政法大学金融学院
本文编辑:周一鸣
技术总编:李婷婷
Stata and Python 数据分析
爬虫俱乐部Stata基础课程、Stata进阶课程和Python课程可在小鹅通平台查看,欢迎大家多多支持订阅!如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~1. append
DataFrame.append(other, ignore_index=False, verify_integrity=False, sort=False)
将other的行附加到调用者的末尾,返回一个新对象。[出处](https://github.com/pandas-dev/pandas/blob/v1.5.1/pandas/core/frame.py#L9645-L9755)
other:DataFrame或Series/dict类对象,或这些对象的list需要添加的数据
ignore_index:布尔值,默认为False;如果为True,结果轴将被标记为0, 1, …, n - 1。
verify_integrity:布尔值,默认为False;如果为True,则在使用副本创建索引时引发ValueError异常。
sort:布尔值,默认为False;如果self和other的列没有对齐,则对列进行排序。
Returns:DataFrame,一个新的DataFrame,由调用者的行和other的行组成。
如果传递了一个字典/系列列表,并且键都包含在DataFrame的索引中,则结果DataFrame中的列顺序将保持不变。
在DataFrame中迭代添加行比单个concatenate计算量更大。更好的办法是将这些行附加到列表中,然后将列表与原始的DataFrame一起连接起来。
import pandas as pd
df1=pd.DataFrame({'id':[1,2,3],'name':['张三','李四','王五'],'age':[21,26,23],'score':[90,89,63]})
df2=pd.DataFrame({'id':[4,5,6],'name':['小王','小红','小明'],'age':[20,25,21],'score':[79,78,100]})
df1.append(df2)
2. concat
pd.concat([data1, data2], axis=1)
按照行或列进行合并,axis=0为列索引,axis=1为行索引pd.concat([df1,df2]) #默认纵向合并
pd.concat([df1,df2],keys=['df1','df2']) #添加参数key为合并后的数据添加新索引,用来区分数据
pd.concat([df1,df2],axis=1,keys=['df1','df2'])
3. merge
pd.merge(left, right, how='inner', on=None)
可以指定按照两组数据的共同键值对合并或者左右各自 left
: DataFrameright
: 用以匹配的DataFrameon
: 指定的共同键how
:按照什么方式连接
在连接方式上,pandas主要有以下5种:
连接方式 | 值 | 备注 |
左连接 | left | 仅保留左表的记录 |
右连接 | right | 仅保留右表的记录 |
外连接 | outer | 保留两个表的所有记录 |
内连接 | inner | 仅保留两表共同的记录 |
笛卡尔连接 | cross | 两表中的数据集交叉匹配,生成笛卡尔积 |
在具体操作中,首先生成df3和df4:
df3=pd.DataFrame({'id':[1,2,3,5],'name':['张三','李四','王五','小红'],'age':[21,26,23,25]})
df4=pd.DataFrame({'id':[3,5,6],'score':[63,78,100]})
pd.merge(left=df3,right=df4,on='id',how='left')
id
,连接方式为左连接。运行结果如下:on
也能成功连接。如上图所示,左连接即以左侧合并数据df3为基准,在其基础上合并新变量,而不再增加新的观测值。 pd.merge(left=df3,right=df4,how='right')
pd.merge(left=df3,right=df4,how='inner')
pd.merge(left=df3,right=df4,how='outer')
left_on
和right_on
参数进行设置。df5=pd.DataFrame({'id1':[1,2,3,5],'name':['张三','李四','王五','小红'],'age':[21,26,23,25]})
df6=pd.DataFrame({'id2':[3,5,6],'score':[63,78,100]})
pd.merge(left=df5,right=df6,left_on='id1',right_on='id2',how='outer')
_x
,右表后缀为_y
。也可以使用suffixes
参数手动设置后缀。具体程序与结果如下所示: df7=pd.DataFrame({'id':[1,2,3,5],'name':['张三','李四','王五','小红'],'score':[90,89,63,78]})
df8=pd.DataFrame({'id':[2,5,6],'score':[83,86,92]})
pd.merge(left=df7,right=df8,how='outer',on='id') #默认后缀名为_x, _y
pd.merge(left=df7,right=df8,how='outer',on='id',suffixes=('_l','_r')) #自行设置后缀名
4.join
merge
和join
作为Pandas中常用的数据融合方法,目的都是将两个数据表通过共同字段进行匹配。left.join(right, on=None, how='left', lsuffix='', rsuffix='', sort=False)
join
的参数比merge
更简单易懂,且各参数的含义和用法与merge
基本一致。事实上,join
是merge
的简化版本,其全部操作均可以使用merge
实现。为方便使用,我们推荐大家使用merge
而非join
。在这里,我们不再对join
进行深入介绍,有需要的读者可以查阅pandas官网。最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
爬虫俱乐部新命令:cnkchart帮你绘制股票K线图!
Python常见内置函数(一)Stata绘图系列——饼形图绘制【爬虫实战】深交所服务业年报数据“挂羊头卖狗肉”?
Python与excel交互--xlsxwriter模块cnmapsearch——离公司最近的快餐店在哪
Python中的异常处理 Python交互式数据可视化——酷炫的Altair库 hk系列命令(3)—— hktrade hk系列命令(2)—— hkar hk系列命令(1)—— hkstock 超好用的字符串方法 基于Python的假设检验实现Stata与MySQL交互--基础操作 Jupyter Notebook中的魔术命令《Stata正则表达式》由中国金融出版社出版发行 匿名函数lambda到底怎么用?关于我们
微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。
此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com投稿要求:1)必须原创,禁止抄袭;2)必须准确,详细,有例子,有截图;注意事项:1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。